package cn.iocoder.yudao.module.system.service.warehouse;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.warehouse.vo.GoldMaterialWarehousePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.warehouse.vo.GoldMaterialWarehouseSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.warehouse.GoldMaterialWarehouseDO;

import java.util.List;


public interface GoldMaterialWarehouseService {

    Long create(GoldMaterialWarehouseSaveReqVO createReqVO);

    void update(GoldMaterialWarehouseSaveReqVO updateReqVO);

    void delete(Long id);

    GoldMaterialWarehouseDO get(Long id);

    PageResult<GoldMaterialWarehouseDO> getPage(GoldMaterialWarehousePageReqVO pageReqVO);

    /**
     * 查询调拨仓库选项
     * 查询指定类型的仓库，排除指定仓库
     *
     * @param excludeWarehouseId 排除的仓库ID
     * @param warehouseTypes 仓库类型列表，null时默认查询公司仓和团队仓
     * @return 调拨仓库列表
     */
    List<GoldMaterialWarehouseDO> getTransferOptions(Long excludeWarehouseId, List<Integer> warehouseTypes);

    /**
     * 查询所有状态为开启的仓库简单信息
     * 只返回id、name、balance字段
     *
     * @return 开启状态的仓库列表
     */
    List<GoldMaterialWarehouseDO> getEnabledWarehouseSimpleList();

    /**
     * 根据团队仓ID查询所有人员仓库
     *
     * @param teamWarehouseId 团队仓ID
     * @return 人员仓库列表
     */
    List<GoldMaterialWarehouseDO> getPersonWarehousesByTeamWarehouseId(Long teamWarehouseId);

    /**
     * 查询团队仓下的人员仓库数量
     *
     * @param teamWarehouseId 团队仓ID
     * @return 人员仓库数量
     */
    Long getPersonWarehouseCountByTeamWarehouseId(Long teamWarehouseId);

    /**
     * 查询所有团队仓
     *
     * @return 团队仓列表
     */
    List<GoldMaterialWarehouseDO> getAllTeamWarehouses();

    /**
     * 根据团队仓ID查询相同ID的仓库
     *
     * @param teamWarehouseId 团队仓ID
     * @return 仓库列表
     */
    List<GoldMaterialWarehouseDO> getWarehousesByTeamWarehouseId(Long teamWarehouseId);

    List<GoldMaterialWarehouseDO> getWarehousesByTeamWarehouseIds(Long teamWarehouseId);

}